
package com.qdu.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
//定义一个方面类，包含次要业务逻辑
@Aspect //将一个类注册为一个方面类，可用于切入到主要业务逻辑中
public class LogAspect {
    
    //声明一个切入点
    @Pointcut("execution(* com.qdu.dao.*.*(..))") //1. 切入点表达式
    private void logPointcut(){} //切入点对应的方法签名,方法名随便起
    //使用方法名来使用切入点
    
    //@Before("execution(* com.qdu.dao.*.*(..))")
    //如果想获取当前连接点的信息，那么可添加一个JoinPoint参数
    @Before("logPointcut()")  //使用前面定义的切入点
    //导包 Ctrl+Shift+I
    public void logBefore(JoinPoint point){
        //参数：parameter, argument
        //point.getArgs(); //获取连接点方法的所有参数,以对象数组的形式返回
        //point.getTarget(); //获取目标对象，也就是UserDaoImpl对象
        //point.getSignature() //获取连接方法的签名
        //signature 签名
        System.out.println("----方法调用前,当前方法："+point.getSignature().getName());
    }
    
    //方法签名：方法名+参数
    
    
    @AfterReturning("logPointcut()")
    public void logAfterReturning(JoinPoint point){
        System.out.println("****方法调用后,当前方法："+point.getSignature().getName());
    }
}
